Memory safety in the context of C/C++ became a concern a decade or so after the advent of the languages. A memory access error can be described as a dereference outside the bounds of the referent, either address-wise or time-wise. The former comprises a spatial access error, for example, array out of bounds access error, and the latter comprises a temporal access error, for example, dereferencing a pointer after the object has been freed. In previous work, a system was developed to detect such errors relatively precisely (viz. temporal access errors, whose treatment earlier had been limited). However, that system had limited efficiency (temporal error checks had a hash-table implementation with worst-case linear costs; for large fat pointer structures, register allocation was compromised with accompanying performance degradation; execution-time overheads were benchmarked above 300%). The fat pointers also compromised backward compatibility. Significant work has subsequently transpired on these error classes because of the very hard to trace and fix attributes of these errors. The insight into temporal access errors, namely that object lifetimes can be caught as a pointer attribute, a capability, has led to several works—Electric Fence, PageHeap, and its follow-ons.